home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8174 / 8174.xpi / chrome / antbar.jar / content / rank / rank.js
Text File  |  2009-12-30  |  8KB  |  280 lines

  1.  
  2.   /*
  3.    * DO NOT EDIT THIS FILE !
  4.    *
  5.    * IT WAS AUTOMATICALLY COPIED FROM THE /lib/ DIRECTORY
  6.    * TO UPDATE IT YOU NEED TO BUILD THE XPI OF THE CURRENT PROJECT
  7.    *
  8.    */
  9.  
  10. // 
  11. //  rank.js
  12. //  firefox
  13. //  
  14. //  Created by Seed on 2008-10-23.
  15. //  Copyright 2008-2009 Ant.com. All rights reserved.
  16. // 
  17.  
  18. var AntRankVersion = 1;
  19.  
  20. AntLib.toLog("AntRankService including, typeof(AntRankService):" + typeof(AntRankService));
  21.  
  22. var AntRankService = (typeof(AntRankService) == 'undefined' || AntRankService.version < AntRankVersion) ?
  23. {
  24.     url: null,
  25.     UUID: null,
  26.     rankButton: null,
  27.     version: AntRankVersion,
  28.     inited: null,
  29.  
  30.     init: function()
  31.     {
  32.         var self = AntRankService;
  33.  
  34.         if (self.inited)
  35.         {
  36.             AntLib.toLog("AntRankService version " + self.version + ' already initialized');
  37.             return;
  38.         }
  39.  
  40.         AntLib.toLog("AntRankService initializing version " + self.version);
  41.  
  42.         try {
  43.             self.initUid();
  44.             self.rankButtons = new AntArray();
  45.             self.rankContainers = new AntArray();
  46.  
  47.             AntWatchUrl.addWatcher(
  48.                                    function (aURI)
  49.                                    {
  50.                                        self.updateRank(aURI);
  51.                                    });
  52.         } catch (e) {
  53.             AntLib.toLog('AntRankService initializing failed: ' + e);
  54.         }
  55.         self.inited = true;
  56.     },
  57.  
  58.     getRankBranch: function()
  59.     {
  60.         return AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  61.         .getBranch("extensions.antrankservice.");
  62.     },
  63.  
  64.     getAntBarUuid: function() 
  65.     {
  66.         var self = AntRankService;
  67.         try {
  68.             var pref = AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  69.                 .getBranch("extensions.anttoolbar.");
  70.             var uuid = pref.getCharPref("uuid");
  71.  
  72.             if (uuid == null || uuid.length == 0)
  73.                 return null;
  74.             return '{' + uuid.toUpperCase().replace(/[{}]/g, '') + '}';
  75.         } catch (e) {
  76.             return null;
  77.         }
  78.     },
  79.  
  80.     initUid: function()
  81.     {
  82.         var self = AntRankService;
  83.         var pref = self.getRankBranch();
  84.         var uuid = pref.getCharPref("uuid");
  85.  
  86.         if (!uuid)
  87.         {
  88.             uuid = self.getAntBarUuid();
  89.             if (!uuid)
  90.             {
  91.                 uuid = Components.classes["@mozilla.org/uuid-generator;1"].
  92.                     getService(Components.interfaces.nsIUUIDGenerator).
  93.                     generateUUID().toString().toUpperCase();
  94.             }
  95.             pref.setCharPref("uuid", uuid);
  96.         }
  97.         self.UUID = uuid;
  98.     },
  99.  
  100.     isRankEnable: function()
  101.     {
  102.         var self = AntRankService;
  103.         if (typeof(self.rankButtons) == 'undefined')
  104.         {
  105.             AntLib.toLog('isRankEnable error: self.rankButtons undefined');
  106.             return false;
  107.         }
  108.         AntLib.toLog('isRankEnable, rankButtons number: ' + self.rankButtons.length);
  109.         return self.rankButtons.length != 0;
  110.     },
  111.  
  112.     removeButtonId: function (rankButtonId, rankVisibleId)
  113.     {
  114.         var self = AntRankService;
  115.         var button = AntLib.ob(rankButtonId);
  116.  
  117.         AntLib.toLog('hidding ' + rankButtonId);
  118.  
  119.         self.rankButtons.removeValue(button);
  120.         self.rankContainers.removeValue(button);
  121.         button.setAttribute('hidden', true);
  122.  
  123.         if (typeof(rankVisibleId) != 'undefined')
  124.         {
  125.             AntLib.toLog('hidding ' + rankVisibleId);
  126.  
  127.             button = AntLib.ob(rankVisibleId);
  128.             self.rankContainers.removeValue(button);
  129.             button.setAttribute('hidden', true);
  130.         }
  131.     },
  132.  
  133.     addButtonId: function (rankButtonId, rankVisibleId)
  134.     {
  135.         var self = AntRankService;
  136.         var button = AntLib.ob(rankButtonId);
  137.  
  138.         AntLib.toLog('addButtonId Info: adding: ' + rankButtonId);
  139.  
  140.         if (button == null)
  141.         {
  142.             AntLib.toLog('addButtonId Warning: unknown ID: ' + rankButtonId);
  143.         }
  144.  
  145.         if (button != null && !self.rankButtons.inArray(button))
  146.             self.rankButtons.push(button);
  147.  
  148.         if (typeof(rankVisibleId) != 'undefined')
  149.         {
  150.             var friendOfVisibility = AntLib.ob(rankVisibleId);
  151.             if (!self.rankContainers.inArray(friendOfVisibility))
  152.                 self.rankContainers.push(friendOfVisibility);
  153.         }
  154.  
  155.         if (!self.rankContainers.inArray(button))
  156.             self.rankContainers.push(button);
  157.     },
  158.  
  159.     updateVisible: function()
  160.     { 
  161.         var self = AntRankService;
  162.  
  163.         for (var j = 0; j < self.rankContainers.length; j++)
  164.         {
  165.             AntLib.toLog('setting hidden false to: ' + self.rankContainers[j].id);
  166.             self.rankContainers[j].setAttribute('hidden', false);
  167.         }
  168.     },
  169.  
  170.     isValidRankUrl: function (url)
  171.     {
  172.       var ios = AntLib.CCSV('@mozilla.org/network/io-service;1', "nsIIOService");
  173.       try
  174.       {
  175.         var uri = ios.newURI(url, null, null);
  176.         return (url.match(/^https?:\/\//i) && uri.host != "localhost");
  177.       }
  178.       catch (e)
  179.       { 
  180.         AntLib.toLog("error isValidRankUrl : " + e);
  181.         return false; 
  182.       }
  183.     },
  184.  
  185.     cleanRank: function ()
  186.     {
  187.         var self = AntRankService;
  188.         self.url = null;
  189.         var lab = AntLang.getString("AntRank.noRank"); 
  190.     },
  191.  
  192.     setLabelRank: function (rank)
  193.     {
  194.         var self = AntRankService;
  195.  
  196.         if (!rank || !parseInt(rank, 10))
  197.             rank = AntLang.getString("AntRank.noRank"); 
  198.         else
  199.             rank = AntLang.getString("AntRank.Rank") + ": " + rank;
  200.         
  201.         rank = AntLib.trim(rank);
  202.         var size = 9 * rank.length;
  203.         var minwidth = size < 40 ? 40 : size
  204.  
  205.         for (var i = 0; i < self.rankButtons.length; i++)
  206.         {
  207.             self.rankButtons[i].setAttribute("label", rank);
  208.             self.rankButtons[i].setAttribute("minwidth", minwidth);
  209.         }
  210.  
  211.     },
  212.  
  213.     fetchRank: function (url)
  214.     {
  215.         var self = AntRankService;
  216.         try {
  217.             var body = "url=" + AntLib.uriEncode(url) +
  218.             "&ref=" + AntLib.uriEncode(gBrowser.contentDocument.referrer) +
  219.             "&uid=" + self.UUID;
  220.         }
  221.         catch(e) {
  222.             AntLib.toLog("Error forming RANK body : " + e);
  223.             return;
  224.         }
  225.         var httpRequest = new XMLHttpRequest();
  226.  
  227.         httpRequest.open("POST", "http://rank.ant.com/fetch/", true);
  228.         httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  229.  
  230.         httpRequest.onload = function ()
  231.         {
  232.           var rank = httpRequest.responseText;
  233.           gBrowser.contentDocument.__antrank__ = rank;
  234.           self.setLabelRank(rank);
  235.         };
  236.         httpRequest.send(body);
  237.     },
  238.  
  239.     updateRank: function (aURI)
  240.     {
  241.         var self = AntRankService;
  242.  
  243.         try {
  244.             if ( self.isRankEnable() == false )
  245.                 return;
  246.             self.cleanRank();
  247.             self.url = aURI;
  248.             var rank = null;
  249.             if (self.isValidRankUrl(self.url.spec))
  250.             {
  251.                 if (gBrowser.contentDocument.__antrank__)
  252.                     rank = gBrowser.contentDocument.__antrank__;
  253.                 else
  254.                 {
  255.                     self.fetchRank(self.url.spec);
  256.                     return;
  257.                 }
  258.             }
  259.             self.setLabelRank(rank);
  260.         } catch (e) {
  261.             AntLib.toLog('updateRank error: ' + e);
  262.         }
  263.     },
  264.  
  265.     goProfil: function ()
  266.     {
  267.         var self = AntRankService;
  268.         if (!self.isValidRankUrl(self.url.spec))
  269.             return;
  270.  
  271.         var domain = self.url.host;
  272.         if (domain)
  273.         {
  274.             AntLib.openURL('http://www.ant.com/site/' + domain, true);
  275.         }
  276.     }
  277. } : AntRankService;
  278.  
  279.     
  280.